import { getRepository, Like } from "typeorm";
import { User } from "../entity/User";

class UserServer {

  // public userRepository = getRepository(User);

  // 添加新用户
  async addUser(userDate: User) {
    const userRepository = getRepository(User);
    const user = userRepository.create(userDate);
    return userRepository.save(user);
  }

  // 修改用户信息
  async updateUser(id: number, user: User) {
    const userRepository = getRepository(User);
    return userRepository.update(id, user);
  }

  // 查找所有用户
  async findAllUser() {
    const userRepository = getRepository(User);
    return userRepository.find();
  }

  // 根据 id 查找用户
  async findById(id: number) {
    const userRepository = getRepository(User);
    return userRepository.findOne(id)
  }

  // 根据用户名查找用户
  async findByName(username: string) {
    const userRepository = getRepository(User);
    return userRepository.findOne({
      where: {
        username
      }
    })
  }

  // 根据用户名查找用户，可以寻找到多个相同用户名的用户，以数组的形式返回
  async findsByName(username: string) {
    const userRepository = getRepository(User);
    return userRepository.find({
      where: {
        username
      }
    })
  }

  // 根据关键词查找用户（模糊匹配）
  async findByKeyWord(key: string) {
    const userRepository = getRepository(User);
    return userRepository.find({
      username: Like(`%${key}%`)
    })
  }

  // 根据 is_admin 查找用户
  async findByIs_Admin(is_admin: string) {
    const userRepository = getRepository(User);
    return userRepository.find({
      is_admin
    })
  }

  // 删除用户
  async deleteUser(id: number) {
    const userRepository = getRepository(User);
    return userRepository.delete(id);
  }

  // 根据用户名、id、是否管理员, 模糊查询列表数据
  async findUserList(params: any) {
    const userRepository = getRepository(User);
    return userRepository.find({
      where: {
        id: Like(`%${params.id}%`),
        username: Like(`%${params.username}%`),
        is_admin: Like(`%${params.is_admin}%`)
      }
    })
  }

  // async remove(request: Request, response: Response, next: NextFunction) {
  //     let userToRemove = await this.userRepository.findOne(request.params.id);
  //     await this.userRepository.remove(userToRemove);
  // }
}

export default new UserServer()